package persistencia;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import negocio.Peca;

public class MyOSDAO extends ConexaoMySQLDAO{
    
    private PreparedStatement stIncluir;
    private PreparedStatement stPesquisaCodigo;
    private PreparedStatement stPesquisaNome;
    private PreparedStatement stListar;
    private PreparedStatement stAtualiza;
    private final Connection con;
    
    public MyOSDAO() throws IOException, SQLException {
        con = super.getConexao();
        stIncluir = con.prepareStatement(
                "INSERT INTO pessoas (codigo, nome, endereco,"
                + " telefone, nascimento) VALUES (?, ?, ?, ?, ?)");
        stListar = con.prepareStatement(
                "SELECT * FROM pessoas");
        stPesquisaCodigo = con.prepareStatement(
                "SELECT * FROM pessoas WHERE codigo=?");
        stPesquisaNome = con.prepareStatement(
                "SELECT * FROM pessoas WHERE nome LIKE ?");
        stAtualiza = con.prepareStatement(
                "UPDATE pessoas SET nome=?, endereco=?,"
                + " telefone=?, nascimento=? WHERE codigo=?");
    }

    public void adiciona(Peca umaPeca) throws Exception{
        stIncluir.setString(1, umaPeca.getDesc());
        stIncluir.setInt(2, umaPeca.getValorInt());
        stIncluir.executeQuery();
    }

    public List<Peca> getPecas() throws Exception{
        List<Peca> tmp = new ArrayList<Peca>();
        ResultSet rs = stListar.executeQuery();
        while(rs.next()){
            tmp.add(new Peca(rs.getString("id_peca"), rs.getString("desc"), rs.getInt("valor")));
        }
        return tmp;
    }

    public void altera(Peca novaPeca) throws Exception {
        stAtualiza.setString(1, novaPeca.getDesc());
        stAtualiza.setInt(2, novaPeca.getValorInt());
        stAtualiza.setInt(3, Integer.parseInt(novaPeca.getId_peca()));
        stAtualiza.executeUpdate();
    }

    public List<Peca> procuraPorNome(String chave) throws Exception {
        stPesquisaNome.setString(1, chave+"%");
        return getLista(stPesquisaNome.executeQuery());
    }

    public Peca procuraPorCodigo(int codigo) throws Exception {
        stPesquisaCodigo.setInt(1, codigo);
        List<Peca> res = getLista(stPesquisaCodigo.executeQuery());
        if(res.isEmpty()) 
            throw new Exception("Registro não encontrado");
        return res.get(0);
    }

    private List<Peca> getLista(ResultSet rs) throws Exception {
        List<Peca> tmp = new ArrayList<Peca>();
        while (rs.next()) {
            tmp.add(new Peca(
                    rs.getString("codigo"), rs.getString("nome"),
                    rs.getInt("endereco")));
        }
        return tmp;
    }    
}